本地数据缓存
Entrez Direct用户通常使用efetch获取所选数据记录,这会调用efetch.fcgi网络服务器。当需要几千条记录时,此解决方案很有效,但它不能扩展到更大的数据集,其中下载所需的时间成为限制因素。
随机存取档案
作为替代方案,整个PubMed记录集可以通过文件传输协议获得,并且可以通过检索每日更新文件来保持最新。可以通过xtract对发布文件进行解压缩和管道传输以进行批量分析,但它们不提供对单个记录的随机访问。
计算机文件系统技术的最新进展现在允许将所有这些已发布的期刊文章引用重新打包为廉价的500千兆字节外部固态驱动器上的单个文件,使用文件夹层次结构来组织2800万个PubMed记录。此方法使用PMID中的数字对作为目录结构中的节点,从而提供对任何记录的直接和快速访问。例如,PMID 12345678将作为压缩的XML文件存储在/Archive/12/34/56/12345678.xml.gz中。
EDirect现在包含一个存档发布的脚本,可以完全自动化下载,更新,提取和存储过程。专用固态驱动器的路径将传递到命令行上的脚本:
|
|
它可以每天或每周重新运行,以使存档保持最新。填充存档后,可以将PMID传送到fetch-pubmed脚本,以便从本地数据缓存中检索PubmedArticle XML记录。fetch-pubmed需要Archive子目录的路径才能找到数据。例如:
|
|
如果在用户的.bash_profile配置文件中设置了环境变量,则任一脚本都不需要-path参数:
|
|
假设在后续示例中设置了EDIRECT_PUBMED_MASTER。
本地查询索引
类似的分而治之策略可用于创建适用于大数据挖掘查询的本地信息检索索引。第二个新脚本index-pubmed会自动执行此活动。 (它是存档发布的超集,也可以定期运行。)
对于选定的PubMed文本字段(标题和主要摘要),索引过程会删除特定前缀后的连字符,删除重音符号和变音符号,在标点符号处拆分单词,更正编码工件以及拼写出希腊字母以便于搜索科学术语。然后它准备带有术语位置的倒排索引,并使用它们来构建分布式术语列表和发布文件。
例如,包含“癌症”的术语列表将位于/Postings/c/a/n/c/canc.trm。因此,对癌症的查询仅需要加载总指数的非常小的子集。
该设计支持有效的布尔表达式评估(例如,“(literacy AND numeracy) NOT (adolescent OR child)”),不受限制的通配符截断(例如,“therap*”),短语查询(例如,“selective serotonin reuptake inhibitor”),和邻近搜索(例如,“vitamin c ~ ~ common cold”)。
本地搜索命令
短语搜索脚本控制对本地索引的访问。实际的基础工作由rchive程序完成。术语计数由-count(将通配符扩展组合为单个数字)或-counts(扩展通配符并显示单个术语和计数)返回。使用-query返回与搜索表达式匹配的PMID。
例如,使用截断的短语检查术语列表:
|
|
翻译为:
|
|
并返回单个单词的总计数:
|
|
使用-counts而不是-count返回扩展的术语和单个帖子计数:
|
|
使用短语搜索:
|
|
为包含该短语的记录生成PMID列表,然后从本地存档中检索相关的PubmedArticle XML。使用[STEM]附加查询使用已通过Porter2词干分析算法处理的单词来评估相同的表达式。